home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 42 / Amiga Format AFCD42 (Issue 126, Aug 1999).iso / -serious- / programming / other / ioblixdevkit / c / include / resources / ioblix.h
C/C++ Source or Header  |  1999-05-14  |  14KB  |  262 lines

  1. /*
  2. **      $VER: resources/ioblix.h 37.3 (7.4.99)
  3. **
  4. **      (C) Copyright 1998,1999 Thore Böckelmann
  5. **      All Rights Reserved.
  6. */
  7.  
  8. #ifndef RESOURCES_IOBLIX_H
  9. #define RESOURCES_IOBLIX_H 1
  10.  
  11. #ifndef EXEC_TYPES_H
  12. #include <exec/types.h>
  13. #endif
  14.  
  15. #ifndef EXEC_NODES_H
  16. #include <exec/nodes.h>
  17. #endif
  18.  
  19. #ifndef EXEC_LISTS_H
  20. #include <exec/lists.h>
  21. #endif
  22.  
  23. #ifndef EXEC_LIBRARIES_H
  24. #include <exec/libraries.h>
  25. #endif
  26.  
  27. #ifndef EXEC_SEMAPHORES_H
  28. #include <exec/semaphores.h>
  29. #endif
  30.  
  31. #ifndef EXEC_INTERRUPTS_H
  32. #include <exec/interrupts.h>
  33. #endif
  34.  
  35. #ifndef PREFS_SERIAL_H
  36. #include <prefs/serial.h>
  37. #endif
  38.  
  39. #define IOBLIXRESNAME               "ioblix.resource"
  40.  
  41. /* manufacturer and product IDs for RBM products */
  42. #define RBM_MANUF_ID                4711    /* manufacturer ID of RBM Digitaltechnik    */
  43. #define IOBLIX_Z2_PROD_ID           1       /* board ID of ZorroII IOBlix board         */
  44. #define IOBLIX_1200_SER_PROD_ID     2       /* board ID of IOBlix1200 ser module        */
  45. #define IOBLIX_1200_PAR_PROD_ID     3       /* board ID of IOBlix1200 par module        */
  46.  
  47. /* how many boards can exist */
  48. #define IOBLIX_MAX_Z2_BOARDS        5
  49. #define IOBLIX_MAX_CP_BOARDS        1
  50.  
  51. /* how many units of which type can exist */
  52. #define IOBLIX_Z2_NUM_SERUNITS      4       /* max. serial ports on Z2 board            */
  53. #define IOBLIX_Z2_NUM_PARUNITS      2       /* max. parallel ports on Z2 board          */
  54. #define IOBLIX_Z2_NUM_FIFOUNITS     1       /* max. ext. fifos on Z2 board              */
  55. #define IOBLIX_Z2_NUM_ETHERUNITS    1       /* max. EtherNet modules on Z2 board        */
  56. #define IOBLIX_Z2_NUM_AUDIOUNITS    1       /* max. Audio modules on Z2 board           */
  57.  
  58. #define IOBLIX_CP_NUM_SERUNITS      4       /* max. ser ports on clock port board       */
  59. #define IOBLIX_CP_NUM_PARUNITS      4       /* max. par ports on clock port board       */
  60. #define IOBLIX_CP_NUM_FIFOUNITS     0       /* max. fifos on clock port board           */
  61. #define IOBLIX_CP_NUM_ETHERUNITS    0       /* max. EtherNets on clock port board       */
  62. #define IOBLIX_CP_NUM_AUDIOUNITS    0       /* max. Audio modules on clock port board   */
  63.  
  64. /* the central resource */
  65. struct IOBlixResource {
  66.     struct Library ir_Library;
  67.     struct ExecBase *ir_SysBase;
  68.     /* private data follows, hands off! */
  69. };
  70.  
  71. struct IOBlixBoardNode {
  72.     struct Node ibn_Node;                   /* link                                     */
  73.     struct ConfigDev *ibn_Board;            /* ConigDev structure as returned by        */
  74.                                             /* expansion/FindConfigDev()                */
  75.     UWORD ibn_Type;                         /* Z2, clock port, etc                      */
  76.     UWORD ibn_Number;                       /* internal board number                    */
  77. };
  78.  
  79. /* IOBlixBoardNode.ibn_Type */
  80. #define IBT_ZORRO2                  1       /* ZorroII board                            */
  81. #define IBT_CP_SERIAL               2       /* clock port serial module                 */
  82. #define IBT_CP_PARALLEL             3       /* clock port parallel module               */
  83.  
  84. /* common structure for chip's register addresses */
  85. struct ChipRegs {
  86.     ULONG cr_RegCount;                      /* number of register addresses following   */
  87.     APTR cr_Regs[1];                        /* dummy array of register addresses        */
  88.                                             /* cr_RegCount pointers follow              */
  89. };
  90.  
  91. struct IOBlixPnPInfo {
  92.     UBYTE pnp_SerialIdentifier[32];         /* serial identifiert read during PnP       */
  93.     UBYTE pnp_DeviceIdent[8];
  94.     ULONG pnp_DeviceSerNo;
  95.     APTR pnp_AddressAddr;                   /* address register address                 */
  96.     APTR pnp_WriteAddr;                     /* write register address                   */
  97.     APTR pnp_ReadAddr;                      /* read register address                    */
  98.     ULONG pnp_CardSelectNumber;             /* PnP device number (CSN)                  */
  99.     ULONG pnp_LogicalDeviceNumber;          /* logical device number of this chip       */
  100.     APTR pnp_Reserved[4];
  101. };
  102.  
  103. /* IOBlixChipNode, returned by FindChip() and ObtainChip */
  104. /* all fields are READ-ONLY! */
  105. struct IOBlixChipNode {
  106.     struct Node icn_Node;                   /* link                                     */
  107.     ULONG  icn_Flags;                       /* flags                                    */
  108.     UWORD  icn_Type;                        /* chip type (ser, par, etc)                */
  109.     UWORD  icn_Number;                      /* chip's internal number                   */
  110.                                             /* equals unit number of devices            */
  111.     struct ChipRegs *icn_ChipRegisters;     /* array of pointers to chips registers     */
  112.                                             /* ie a pointer to (struct UARTRegisters *) */
  113.                                             /* the old icn_Address entry is obsolete    */
  114.     UBYTE  icn_Description[256];            /* name, information, etc                   */
  115.     UBYTE *icn_Owner;                       /* current owner name, or NULL if none      */
  116.     struct IOBlixBoardNode *icn_Board;      /* board to which the chip belongs to       */
  117.     LONG   icn_ExpanderPort;                /* cp port, if used with cp expander        */
  118.                                             /* -1 for Z2 boards                         */
  119.                                             /* 0..3 for clockport modules               */
  120.     struct SignalSemaphore icn_SharedAccessSema;
  121.                                             /* semaphore for shared chip access         */
  122.                                             /* you MUST obtain this if you want to      */
  123.                                             /* access the chip in shared mode to avoid  */
  124.                                             /* crashes                                  */
  125.     struct List icn_SharedAccessorList;     /* list of shared accessors                 */
  126.     ULONG  icn_SharedAccessorCount;         /* counter for shared accesses              */
  127.     union {
  128.         struct SerialChipProperties {
  129.             ULONG scp_UARTType;             /* serial UART type                         */
  130.             ULONG scp_FIFOSize;             /* UART's fifo size                         */
  131.             ULONG scp_Flags;                /* flags                                    */
  132.             ULONG scp_Frequency;            /* oscillator frequency                     */
  133.             struct SerialPrefs scp_Prefs;   /* baud, handshake, etc                     */
  134.         } icn_SerialProperties;
  135.         struct ParallelChipProperties {
  136.             ULONG pcp_Abilities;            /* parport ability mask                     */
  137.             ULONG pcp_FIFOSize;             /* parallel fifo size                       */
  138.             ULONG pcp_WriteThresh;          /* irq threshold on write                   */
  139.             ULONG pcp_ReadThresh;           /* irq threshold on read                    */
  140.         } icn_ParallelProperties;
  141.         struct ExternalFIFOProperties {
  142.             BOOL efp_Installed;
  143.             BOOL efp_Operable;
  144.             ULONG efp_WriteFIFOSize;
  145.             ULONG efp_WriteHalfFullSize;
  146.             ULONG efp_ReadFIFOSize;
  147.             ULONG efp_ReadHalfFullSize;
  148.         } icn_ExternalFIFOProperties;
  149.         struct AudioChipProperties {
  150.             struct IOBlixPnPInfo acp_PnPInfo;
  151.         } icn_AudioChipProperties;
  152.     } icn_Properties;
  153. };
  154.  
  155. #define icns_UARTType               icn_Properties.icn_SerialProperties.scp_UARTType
  156. #define icns_FIFOSize               icn_Properties.icn_SerialProperties.scp_FIFOSize
  157. #define icns_Flags                  icn_Properties.icn_SerialProperties.scp_Flags
  158. #define icns_Frequency              icn_Properties.icn_SerialProperties.scp_Frequency
  159. #define icns_Prefs                  icn_Properties.icn_SerialProperties.scp_Prefs
  160. #define icnp_Abilities              icn_Properties.icn_ParallelProperties.pcp_Abilities
  161. #define icnp_FIFOSize               icn_Properties.icn_ParallelProperties.pcp_FIFOSize
  162. #define icnp_WriteThresh            icn_Properties.icn_ParallelProperties.pcp_WriteThresh
  163. #define icnp_ReadThr